from appium.webdriver.common.appiumby import AppiumBy
from base.base_page import BasePage  # 需根据实际项目导入 BasePage 所在模块
import time

class MinePage(BasePage):
    # 页面标题
    PAGE_TITLE = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的']")
    # 用户头像（点击可进入个人信息页）
    USER_AVATAR = (AppiumBy.XPATH, "//android.widget.ImageView[@resource-id='...' and @content-desc='用户头像']")  
    # 用户昵称（显示在头像下方）
    USER_NICKNAME = (AppiumBy.XPATH, "//android.widget.TextView[@resource-id='...' and @content-desc='用户昵称']")

    #登录按钮
    LOGIN_BUTTON = (AppiumBy.XPATH, '//android.widget.TextView[@resource-id="com.oxbix.spanlogistics:id/tv_name"]')
    #用户名
    USER_NAME = (AppiumBy.ID, 'com.oxbix.spanlogistics:id/tv_name')
    #设置按钮
    SETTING_ICON = (AppiumBy.XPATH, '//android.widget.ImageView[@resource-id="com.oxbix.spanlogistics:id/iv_setting"]')

    # 客户编码（显示在昵称下方）
    CUSTOMER_CODE = (AppiumBy.XPATH, "//android.widget.TextView[@resource-id='...' and @content-desc='客户编码']")  
    # 余额（显示在客户编码下方，如 "¥0.00"）
    BALANCE = (AppiumBy.XPATH, "//android.widget.TextView[@resource-id='...' and contains(@text, '¥')]")  
    # 充值按钮（余额右侧）
    RECHARGE_BUTTON = (AppiumBy.XPATH, "//android.widget.TextView[@text='充值']")
    # 优惠券入口（我的优惠券）
    COUPON_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的优惠券']")
    # 积分入口（我的积分）
    POINTS_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的积分']")
    # 我的地址簿入口
    ADDRESS_BOOK_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的地址簿']")
    # 我的收藏入口
    FAVORITES_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的收藏']")
    # 我的评价入口
    MY_REVIEWS_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='我的评价']")
    # 服务协议入口
    SERVICE_AGREEMENT_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='服务协议']")
    # 隐私政策入口
    PRIVACY_POLICY_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='隐私政策']")
    # 关于我们入口
    ABOUT_US_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='关于我们']")
    # 帮助与反馈入口
    HELP_FEEDBACK_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='帮助与反馈']")
    # 客服中心入口
    CUSTOMER_SERVICE_ENTRY = (AppiumBy.XPATH, "//android.widget.TextView[@text='客服中心']")
    # 设置入口（右上角齿轮图标）
    SETTINGS_ENTRY = (AppiumBy.XPATH, "//android.widget.ImageView[@resource-id='...' and @content-desc='设置']")  
    # 退出登录按钮
    LOGOUT_BUTTON = (AppiumBy.XPATH, "//android.widget.TextView[@text='退出登录']")

    # 常用功能入口定位器
    entry_names = ["实名认证", "地址簿", "支付开票", "偏好设置", "网点查询", "账号权限", "电子合同", "下载入口",
                   "在线理赔", "违禁品查询", "跨越打单", "默认模板", "供应商自荐", "客户服务", "代收货款", "总裁信箱",
                   "联系商务", "功能反馈", "问卷调查","产品介绍"]

    function_entry_locators = {
        key: (AppiumBy.XPATH,
              f'//android.widget.TextView[@resource-id="com.oxbix.spanlogistics:id/title" and @text="{key}"]') for key in
        entry_names
    }

    # 其他服务入口定位器
    PRESIDENT_MAILBOX_LOC = (AppiumBy.XPATH, "//*[@text='总裁信箱']")
    CONTACT_BUSINESS_LOC = (AppiumBy.XPATH, "//*[@text='联系商务']")
    FUNCTION_FEEDBACK_LOC = (AppiumBy.XPATH, "//*[@text='功能反馈']")
    QUESTIONNAIRE_SURVEY_LOC = (AppiumBy.XPATH, "//*[@text='问卷调查']")
    PRODUCT_INTRODUCTION_LOC = (AppiumBy.XPATH, "//*[@text='产品介绍']")
    # ---------------------- 操作方法 ----------------------

    def click_login_register(self):
        """点击登录/注册按钮"""
        self.click(self.LOGIN_BUTTON)

    def is_login_success(self,assert_name) -> bool:
        """通过头像元素判断是否登录成功"""
        start_time = time.time()
        user_name =  self.get_text(self.USER_NAME)
        self.logger.info(f"获取元素耗时: {time.time() - start_time:.2f}秒")
        self.logger.info(f"user_name为：{str(user_name.strip())}")
        self.logger.info(f"assert_name为：{assert_name.strip()}")
        if str(user_name.strip()) == assert_name.strip():
            self.logger.info(f"登录成功,用户名称为：{user_name}")
            return True
        else:
            self.logger.info(f"登录失败,用户名称为：{user_name}")
            return False

    def click_setting(self):
        self.logger.info(f"点击设置按钮，进入设置页")
        self.click(self.SETTING_ICON)


    def click_user_avatar(self):
        """点击用户头像，进入个人信息页面"""
        self.click(self.USER_AVATAR)

    def get_user_nickname(self):
        """获取用户昵称文本"""
        return self.get_text(self.USER_NICKNAME)

    def get_customer_code(self):
        """获取客户编码文本"""
        return self.get_text(self.CUSTOMER_CODE)

    def get_balance(self):
        """获取余额文本"""
        return self.get_text(self.BALANCE)

    def click_recharge(self):
        """点击充值按钮，进入充值页面"""
        self.click(self.RECHARGE_BUTTON)

    def click_coupon(self):
        """点击优惠券入口，进入我的优惠券页面"""
        self.click(self.COUPON_ENTRY)

    def click_points(self):
        """点击积分入口，进入我的积分页面"""
        self.click(self.POINTS_ENTRY)

    def click_address_book(self):
        """点击地址簿入口，进入我的地址簿页面"""
        self.click(self.ADDRESS_BOOK_ENTRY)

    def click_favorites(self):
        """点击收藏入口，进入我的收藏页面"""
        self.click(self.FAVORITES_ENTRY)

    def click_my_reviews(self):
        """点击评价入口，进入我的评价页面"""
        self.click(self.MY_REVIEWS_ENTRY)

    def click_service_agreement(self):
        """点击服务协议入口，查看服务协议"""
        self.click(self.SERVICE_AGREEMENT_ENTRY)

    def click_privacy_policy(self):
        """点击隐私政策入口，查看隐私政策"""
        self.click(self.PRIVACY_POLICY_ENTRY)

    def click_about_us(self):
        """点击关于我们入口，查看关于我们信息"""
        self.click(self.ABOUT_US_ENTRY)

    def click_help_feedback(self):
        """点击帮助与反馈入口，进入帮助与反馈页面"""
        self.click(self.HELP_FEEDBACK_ENTRY)

    def click_customer_service(self):
        """点击客服中心入口，进入客服中心页面"""
        self.click(self.CUSTOMER_SERVICE_ENTRY)

    def click_settings(self):
        """点击设置入口，进入设置页面"""
        self.click(self.SETTINGS_ENTRY)

    def click_logout(self):
        """点击退出登录按钮，触发退出登录操作"""
        self.click(self.LOGOUT_BUTTON)



    def go_to_page(self,page_name):
        """
        根据页面名称，点击对应入口进入页面
        :param page_name: 页面中文名称（如"地址簿" "偏好设置" ）
        """
        # 校验页面名称是否存在于字典中
        if page_name not in self.function_entry_locators:
            raise KeyError(f"页面 {page_name} 未配置定位器，请检查 function_entry_locators 字典")
        self.click(self.function_entry_locators[page_name])
